/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.fiap.dao;

import br.com.fiap.vo.PessoaVO;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author Fabianoss
 */
public class PessoaDAO {
    
    private PessoaVO pessoaVO;
    private String query;
    private Statement stmt;
    private PreparedStatement pstmt;
    private ResultSet result;
    private FabricaConexao fb;
    
    public PessoaDAO(){
          fb = FabricaConexao.getInstance();
    }
    
    public void Salvar(PessoaVO pessoaVO){
        this.query = "INSERT INTO `avaliacao1`.`pessoa`(`nome`,`sobrenome`,`endereco`,`numero`,`complemento`,`cep`,`bairro`,`cidade`,`estado`,`telefone`,`celular`,`rg`,`cpf`)VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?);";
          try {   
            this.pstmt = fb.getConnection().prepareStatement(query);
            this.pstmt.setString(1, pessoaVO.getNome());
            this.pstmt.setString(2, pessoaVO.getSobrenome());
            this.pstmt.setString(3,pessoaVO.getEndereco());
            this.pstmt.setString(4,pessoaVO.getNumero());
            this.pstmt.setString(5,pessoaVO.getComplemento());
            this.pstmt.setString(6,pessoaVO.getCep());
            this.pstmt.setString(7,pessoaVO.getBairro());
            this.pstmt.setString(8,pessoaVO.getCidade());
            this.pstmt.setString(9,pessoaVO.getEstado());
            this.pstmt.setString(10,pessoaVO.getTelefone());
            this.pstmt.setString(11,pessoaVO.getCelular());
            this.pstmt.setString(12,pessoaVO.getRg());
            this.pstmt.setString(13,pessoaVO.getCpf());
            this.pstmt.execute(); 
        } catch (SQLException e) {
            e.printStackTrace();
            System.out.println("Erro ao inserir Pessoa.: "+ e.getMessage());
        }finally{
             fb.closeConnection(pstmt, null, null);
        }
    }
    
    public void update(PessoaVO pessoaVO){
        this.query = "UPDATE `avaliacao1`.`pessoa`SET` `nome` = ?,`sobrenome` = ?,`endereco` = ?,`numero` = ?,`complemento` = ?,`cep` = ?,`bairro` = ?,`cidade` = ?,`estado` = ?,`telefone` =?,`celular` = ?,`rg` = ?,`cpf` = ? WHERE idpessoa = ?;";
          try {
            this.pstmt = fb.getConnection().prepareStatement(query);
            this.pstmt.setString(1, pessoaVO.getNome());
            this.pstmt.setString(2, pessoaVO.getSobrenome());
            this.pstmt.setString(3,pessoaVO.getEndereco());
            this.pstmt.setString(4,pessoaVO.getNumero());
            this.pstmt.setString(5,pessoaVO.getComplemento());
            this.pstmt.setString(6,pessoaVO.getCep());
            this.pstmt.setString(7,pessoaVO.getBairro());
            this.pstmt.setString(8,pessoaVO.getCidade());
            this.pstmt.setString(9,pessoaVO.getEstado());
            this.pstmt.setString(10,pessoaVO.getTelefone());
            this.pstmt.setString(11,pessoaVO.getCelular());
            this.pstmt.setString(12,pessoaVO.getRg());            
            this.pstmt.setString(13,pessoaVO.getCpf());
            this.pstmt.setInt(14, pessoaVO.getIdpessoa());
            pstmt.execute();
        } catch (SQLException e) {
            e.printStackTrace();
            System.out.println("Erro ao inserir Pessoa.: "+ e.getMessage());
        }finally{
              fb.closeConnection(pstmt, null, null);
        }
    }
    
    public void delete(PessoaVO pessoaVO){        
       this.query = "DELETE FROM `avaliacao1`.`pessoa`WHERE idpessoa = ?;";
          try {
            this.pstmt = fb.getConnection().prepareStatement(query);
            this.pstmt.setInt(1, pessoaVO.getIdpessoa());
            pstmt.execute();
        } catch (SQLException e) {
            e.printStackTrace();
            System.out.println("Erro ao deletar Pessoa.: "+ e.getMessage());
        }finally{
              fb.closeConnection(pstmt, null, null);
        }
        
    }
    
    public List<PessoaVO> listarPessoasVO(){
        List<PessoaVO> lista = new ArrayList<PessoaVO>();
        this.query = "SELECT * FROM `avaliacao1`.`pessoa`;";
          try {
             this.stmt = fb.getConnection().createStatement();
             this.result = stmt.executeQuery(query);
             
             while(result.next()){
                 PessoaVO vo = new PessoaVO();
                 vo.setIdpessoa(result.getInt("idpessoa"));
                 vo.setNome(result.getString("nome"));
                 vo.setSobrenome(result.getString("sobrenome"));
                 vo.setEndereco(result.getString("endereco"));
                 vo.setNumero(result.getString("numero"));
                 vo.setComplemento(result.getString("complemento"));
                 vo.setCep(result.getString("cep"));
                 vo.setBairro(result.getString("bairro"));
                 vo.setCidade(result.getString("cidade"));
                 vo.setEstado(result.getString("estado"));
                 vo.setTelefone(result.getString("telefone"));
                 vo.setCelular(result.getString("celular"));
                 vo.setRg(result.getString("rg"));
                 vo.setCpf(result.getString("cpf"));
                 lista.add(vo);
             }            
            
        } catch (SQLException e) {
            e.printStackTrace();
            System.out.println("Erro ao deletar Pessoa.: "+ e.getMessage());
        }finally{
              fb.closeConnection(null, stmt, result);
        }
        return lista;  
    }
    
     public PessoaVO getPessoaVOById(int id){
        
        this.query = "SELECT * FROM `avaliacao1`.`pessoa` where idpessoa = ?;";
        PessoaVO vo = new PessoaVO(); 
        try {
             this.pstmt = fb.getConnection().prepareStatement(query);
              this.pstmt.setInt(1, id);
             this.result = pstmt.executeQuery();
             
             while(result.next()){
                
                 vo.setIdpessoa(result.getInt("idpessoa"));
                 vo.setNome(result.getString("nome"));
                 vo.setSobrenome(result.getString("sobrenome"));
                 vo.setEndereco(result.getString("endereco"));
                 vo.setNumero(result.getString("numero"));
                 vo.setComplemento(result.getString("complemento"));
                 vo.setCep(result.getString("cep"));
                 vo.setBairro(result.getString("bairro"));
                 vo.setCidade(result.getString("cidade"));
                 vo.setEstado(result.getString("estado"));
                 vo.setTelefone(result.getString("telefone"));
                 vo.setCelular(result.getString("celular"));
                 vo.setRg(result.getString("rg"));
                 vo.setCpf(result.getString("cpf"));
                 
             }            
            
        } catch (SQLException e) {
            e.printStackTrace();
            System.out.println("Erro ao selecionar Pessoa.: "+ e.getMessage());
        }finally{
               fb.closeConnection(pstmt, null, result);
        }
        return vo;  
    }
     
     public int getMaxIdPessoa(){        
        
        this.query = "SELECT max(`pessoa`.`idpessoa`) FROM `avaliacao1`.`pessoa`;";
        int maxId = 0;
        try {
            this.pstmt = fb.getConnection().prepareStatement(query);
            this.result = pstmt.executeQuery();
             
            while(result.next()){
                maxId = result.getInt(1); 
            }            
            
        } catch (SQLException e) {
            e.printStackTrace();
            System.out.println("Erro ao selecionar Pessoa.: "+ e.getMessage());
        }finally{
               fb.closeConnection(pstmt, null, result);
        }
        return maxId; 

     }
    
}

    